Computer program code and data needed for execution of a process on a computer system typically reside in the computer system's physical memory. Sometimes referred to as “primary storage,” “internal memory,” or “main memory,” physical memory is accessible to the computer's central processing unit (CPU) without the use of the computer's input/output (I/O) channels. Physical memory typically affords very fast access, and is therefore frequently used to store information that is or is likely to be in active use by the CPU.
Because physical memory is typically volatile and relatively expensive, many computer systems utilize secondary storage. This secondary storage is usually accessible to the CPU via the computer's I/O channels and is normally used for persistent storage of relatively large amounts of data. Since the physical memory in many computer systems is more limited than what would be required to store all the program code and data that a user may want to access, many computer systems have what is called “virtual memory.”
In a computer system with virtual memory, some of the program code and/or data in the physical memory may be removed from physical memory and stored in the secondary storage, such as the computer's hard disk, until space becomes available on the physical memory or until such code or data is needed by the CPU. Because access to the code and data in secondary storage is typically slower access than from physical memory, it is desirable to swap code or data in the physical memory that is unlikely to be used soon by the CPU with code or data in the secondary storage.
Many computer systems employing virtual memory have automatic storage allocation schemes to manage the transfer of code and storage between physical memory and secondary storage. Pages of data and program code are transferred from secondary storage to physical memory as the data and program code is needed by an executing process, and pages of data and program code are evicted from physical memory and written to secondary storage when room is needed in physical memory to store other pages of data and program code. The process of moving pages of data and program code back and forth between physical memory and secondary storage is called by a variety of names, including swapping, paging, and virtual memory management.
The location in the physical memory where a particular piece of data or code is stored is referred to as the physical address. A logical address or virtual address is a memory location accessed by an application program in a system with virtual memory such that intervening computer hardware and/or software maps the virtual address to physical memory. During the course of execution of the application, the same virtual address may be mapped to many different physical addresses as data and programs are paged out and paged in to other locations. The virtual address (which may also be referred to as the logical address) typically includes a virtual (or logical) page number plus the location within that page, and is typically interpreted or mapped onto a physical memory address by the operating system using an address translation function. If the page is present in physical memory, the address translation function substitutes the physical page frame number for the logical number. If the address translation function detects that the page requested is not present in physical memory, a fault occurs and the page is read into a physical memory page frame from secondary storage. This address translation function can be accomplished using a directly indexed table, commonly referred to as a “page table,” which identifies the location of the program's pages in physical memory. If the page table indicates that a page is not resident in physical memory, the address translation function issues a page fault to the operating system. This causes execution of the program which required the page to be suspended until the desired page can be read from secondary storage and placed in physical memory.
Portable computing devices typically use a single type of memory device at each level in their memory hierarchy. Higher levels in the memory hierarchy typically operate at higher speeds and lower latency than lower levels. For example, portable computers (e.g., notebook computers) typically have three or more hierarchical levels of memory, including cache memory, secondary storage, and physical memory. Cache memory is typically implemented using Static Random Access Memory (SRAM). Often there are two or more levels of cache memory. Secondary storage is typically implemented with magnetic disk storage (often called hard disk storage). Physical memory is typically implemented with Dynamic Random Access Memory (DRAM). In some portable computers, such as personal digital assistants (PDAs), the secondary storage is implemented using flash memory instead of magnetic disk storage.
DRAM has a near-optimal combination of operational attributes for implementing physical memory. These attributes include, without limitation, low cost (only magnetic disk storage has a lower per-bit cost), low read time (the read access time is within an order of magnitude of that of the highest speed SRAM), low write time that is the same or similar to the read access time, and essentially unlimited endurance (i.e., the storage cell can be rewritten an unlimited number of times). Unfortunately, DRAM is volatile, which is to say that DRAM cannot maintain stored data in the absence of applied power. This means that computers relying upon DRAM for physical memory must maintain applied power even when not in use—a problem of particular significance for battery-powered devices—or require slow boot processes during which information is moved from secondary memory into physical memory. There is therefore a need for memory systems that include nonvolatile physical memory.